#!/usr/bin/env node

const fs = require("fs");
const path = require("path");

/**
 * 获取文件大小
 * @param {string} filePath - 文件路径
 * @returns {number} 文件大小（字节）
 */
function getFileSize(filePath) {
  try {
    const stats = fs.statSync(filePath);
    return stats.size;
  } catch (error) {
    console.error(`！！！获取文件大小失败: ${filePath}`, error.message);
    return -1;
  }
}

/**
 * 清理mediaStore目录中的重复文件
 * 保留相同大小文件中的第一个，删除其余的
 */
function cleanmediaStore() {
  const mediaStoreDir = path.join(__dirname, "../mediaStore");

  // 检查mediaStore目录是否存在
  if (!fs.existsSync(mediaStoreDir)) {
    console.log("mediaStore目录不存在:", mediaStoreDir);
    return;
  }

  // 读取目录中的所有文件
  const files = fs.readdirSync(mediaStoreDir);
  const jpgFiles = files.filter(file => path.extname(file).toLowerCase() === ".jpg");

  if (jpgFiles.length === 0) {
    console.log("mediaStore目录中没有JPG文件");
    return;
  }

  console.log(`找到 ${jpgFiles.length} 个JPG文件`);

  // 创建一个映射，将文件大小映射到文件列表
  const sizeMap = new Map();

  // 遍历所有JPG文件，按大小分组
  for (const file of jpgFiles) {
    const filePath = path.join(mediaStoreDir, file);
    const size = getFileSize(filePath);

    if (size === -1) continue; // 获取文件大小失败

    if (!sizeMap.has(size)) {
      sizeMap.set(size, []);
    }
    sizeMap.get(size).push(file);
  }

  let duplicateCount = 0;
  let deletedCount = 0;

  // 处理每个大小组
  for (const [size, files] of sizeMap) {
    if (files.length > 1) {
      duplicateCount += files.length;
      console.log(`\n发现 ${files.length} 个大小为 ${size} 字节的文件:`);

      // 保留第一个文件，删除其余文件
      for (let i = 1; i < files.length; i++) {
        const fileToDelete = files[i];
        const filePath = path.join(mediaStoreDir, fileToDelete);
        try {
          fs.unlinkSync(filePath);
          console.log(`  删除: ${fileToDelete}`);
          deletedCount++;
        } catch (error) {
          console.error(`！！！  删除失败: ${fileToDelete}`, error.message);
        }
      }
    }
  }

  console.log(`\n清理完成。发现 ${duplicateCount} 个重复文件，删除了 ${deletedCount} 个文件。`);
}

// 如果直接运行此脚本
if (require.main === module) {
  cleanmediaStore();
}

module.exports = {
  cleanmediaStore,
};
